
#pragma once

#include "zacgi.h"

#pragma pack (push, 8)

class UcGiImpLinetypeEngine;

class UcGiLinetypeEngine : public UcRxObject
{
public:
    UCRX_DECLARE_MEMBERS(UcGiLinetypeEngine);

    UcGiLinetypeEngine();
    virtual ~UcGiLinetypeEngine();
    virtual Ucad::ErrorStatus tessellate (bool                 bIsArc,
                                          bool                 bIsCircle,
                                          const ZSoft::UInt32  nPoints,
                                          const UcGePoint3d  * pVertexList,
                                          UcGiWorldDraw *      pWorldDraw,
                                          const UcDbObjectId   linetypeId,
                                          double               linetypeScale,
										  const UcGeVector3d * pNormal,
										  bool plineGen = false);
    virtual Ucad::ErrorStatus tessellate (bool                 bIsArc,
                                          bool                 bIsCircle,
                                          const ZSoft::UInt32  nPoints,
                                          const UcGePoint3d  * pVertexList,
                                          UcGiViewportDraw *   pViewportDraw,
                                          const UcDbObjectId   linetypeId,
                                          double               linetypeScale,
                                          const UcGeVector3d * pNormal,
										  bool plineGen = false);

    virtual Ucad::ErrorStatus tessellate (const UcGeCircArc3d& arcSeg,
                                          const UcGeMatrix3d&  ecsMat,
                                          double               startWidth,
                                          double               endWidth,
                                          UcGiCommonDraw *     pDraw,
                                          const UcDbObjectId   linetypeId,
                                          double               linetypeScale,
                                          double               thick);

    virtual Ucad::ErrorStatus tessellate (const UcGeLineSeg3d& lineSeg,
                                          const UcGeMatrix3d&  ecsMat,
                                          double               startWidth,
                                          double               endWidth,
                                          UcGiCommonDraw *     pDraw,
                                          const UcDbObjectId   linetypeId,
                                          double               linetypeScale);

private:
    UcGiImpLinetypeEngine * mpAcGiImpLinetypeEngine;
};

#pragma pack (pop)
